package com.github.cyf.common.module.response;


import java.util.HashMap;
import java.util.Map;

public enum ResponseCodeEnum {
    /**
     * 请求成功
     */
    SUCCESS("0000", ErrorLevels.DEFAULT, ErrorTypes.SYSTEM, "请求成功"),


    /**
     * 登录相关异常
     */
    LOGIN_USER_INFO_CHECK("LOGIN-0001", ErrorLevels.INFO, ErrorTypes.BIZ, "用户信息错误"),
    LOGIN_USER_NOT_ENABLE("LOGIN-0002", ErrorLevels.INFO, ErrorTypes.BIZ, "用户不可用"),


    /**
     * 权限相关异常
     */
    PERM_NO_PERMISSIONS("PERM-0001", ErrorLevels.INFO, ErrorTypes.BIZ, "用户无权限"),
    PERM_NO_ROLES("PERM-0002", ErrorLevels.INFO, ErrorTypes.BIZ, "用户无角色"),


    /**
     * 业务相关异常
     */
    BIZ_CHECK_FAIL("BIZ-0001", ErrorLevels.INFO, ErrorTypes.BIZ, "业务检查异常"),
    BIZ_STATUS_ILLEGAL("BIZ-0002", ErrorLevels.INFO, ErrorTypes.BIZ, "业务状态非法"),
    BIZ_QUERY_EMPTY("BIZ-0003", ErrorLevels.INFO, ErrorTypes.BIZ, "查询信息为空"),


    /**
     * 加密相关异常
     */
    ENCRYPT_ERROR("ENCRYPT-0001", ErrorLevels.ERROR, ErrorTypes.SYSTEM, "加密异常"),


    /**
     * 文件相关异常
     */
    FILE_UPLOAD_ERROR("FILE-0001", ErrorLevels.INFO, ErrorTypes.BIZ, "文件上传异常"),
    FILE_DOWNLOAD_ERROR("FILE-0002", ErrorLevels.INFO, ErrorTypes.BIZ, "文件下载异常"),
    FILE_NOT_EXIST("FILE-0003", ErrorLevels.INFO, ErrorTypes.BIZ, "文件不存在"),


    /**
     * 限流相关异常
     */
    RATE_LIMIT_ERROR("RATE-LIMIT-0001", ErrorLevels.INFO, ErrorTypes.BIZ, "请求过于频繁，请稍后重试"),

    /**
     * 系统出错
     */
    SYSTEM_EXCEPTION("SYS-0001", ErrorLevels.ERROR, ErrorTypes.SYSTEM, "系统出错啦，请稍后重试"),
    ;

    /**
     * 枚举编码
     */
    private final String code;

    /**
     * 错误级别
     */
    private final String errorLevel;

    /**
     * 错误类型
     */
    private final String errorType;

    /**
     * 描述说明
     */
    private final String description;

    ResponseCodeEnum(String code, String errorLevel, String errorType, String description) {
        this.code = code;
        this.errorLevel = errorLevel;
        this.errorType = errorType;
        this.description = description;
    }

    public String getCode() {
        return code;
    }

    public String getErrorLevel() {
        return errorLevel;
    }

    public String getErrorType() {
        return errorType;
    }

    public String getDescription() {
        return description;
    }


    private static final Map<String, ResponseCodeEnum> CODE_MAP = new HashMap();

    /**
     * 枚举编码与枚举的映射map
     */
    static {
        for (ResponseCodeEnum code : values()) {
            CODE_MAP.put(code.getCode(), code);
        }
    }

    public static ResponseCodeEnum getByCode(String code) {
        return CODE_MAP.get(code);
    }

}

